import type {
  RouteComponent,
  RouteRecordRedirectOption,
  RouteMeta,
  RouteRecordName,
} from "vue-router";
declare type Lazy<T> = () => Promise<T>;

/** 路由类型 */
export interface RouteRecord {
  path: string;
  name?: RouteRecordName;
  redirect?: RouteRecordRedirectOption;
  componentName: RouteComponent | Lazy<RouteComponent> | never | string;
  meta: RouteMeta;
  children?: RouteRecord[] | null;
}

/**
 * 登录用户信息
 */
export interface UserInfo {
  userId?: string; // 用户ID
  loginName?: string; // 用户名
  nickName?: string; // 昵称
  avatar?: string; // 头像
}

/**
 * 用户存储信息
 */
export interface UserStoreInfo {
  userId?: string; // 用户ID
  loginName?: string; // 用户名
  nickName?: string; // 昵称
  avatar?: string; // 头像
  tenant: string; // 租户
  roleCodes: string[];
  permCodes: string[];
}

/**
 * 登录请求参数
 */
export interface LoginData {
  /**
   * 互斥角色
   */
  scope?: string;

  /**
   * 用户名
   */
  username: string;

  /**
   * 密码
   */
  password: string;

  /**
   * 验证码缓存key
   */
  captchaKey?: string;

  /**
   * 目录ID
   */
  directoryId?: string;

  /**
   * 验证码
   */
  captchaCode?: string;
}

/**
 * 登录响应
 */
export interface LoginResult {
  /**
   * 访问token
   */
  accessToken: string;

  /**
   * 过期时间(单位：毫秒)
   */
  expiresIn: number;

  /**
   * 刷新token
   */
  refreshToken: string;
  /**
   * token 类型
   */
  tokenType: string;

  /**过期时间. */
  expiresDate?: number;
}

/**
 * 验证码响应
 */
export interface CaptchaResult {
  /** 验证码缓存key */
  captchaId: string;
  /** 问题 */
  question: string;
  /** 验证码图片Base64字符串 */
  base64Image: string;
}

// 60s倒计时
export interface SendModelRef {
  /**
   * 操作内容
   */
  content: string;

  /**
   * 倒计时
   */
  timers: number;

  /**
   * 按钮启用/禁用
   */
  disabled: boolean;
}

/**
 * 找回密码
 */
export interface VerificateRef {
  /**
   * 邮箱、手机号
   */
  name: string;

  /**
   * 图片验证码ID
   */
  captchaId: string;

  /**
   * 图片验证码
   */
  captchaCode: string;

  /**
   * 手机号、邮箱的验证码
   */
  validCode: string;
}

/**
 * 修改密码
 */
export interface UpdatePwdForm {
  /**
   * 旧密码
   */
  encodeOldPwd: string;

  /**
   * 新密码
   */
  encodeNewPwd: string;

  /**
   * 确认密码
   */
  confirmPwd: string;
}

/**
 * 找回密码
 */
export interface FindPwdRef {
  /**
   * 租户
   */
  tenant: string;

  /**
   * 新密码
   */
  pwd: string;

  /**
   * 确认密码
   */
  repeatPwd: string;

  /**
   * 手机号、邮箱
   */
  name: string;

  /**
   * 手机号、邮箱的验证码
   */
  validCode: string;

  /**
   * 目录ID
   */
  directoryId: string;
}

// 新增编辑表单
export interface UserForm {
  tenant?: string; // 租户
  updateMask?: string; // 更新字段掩码
  requestId?: string; // 用于检测重复请求的唯一字符串ID
  userId?: string; // 用户ID
  repeatPwd?: string; // 密码
  avatar?: string; // 头像
  directoryId?: string; // 目录
  loginName?: string; // 用户名
  nickName?: string; // 昵称
  realName?: string; // 姓名
  birthDate?: string; // 出生日期
  gender?: string; // 性别
  mobilePhone?: string; // 手机号
  roleIds: Array<string>; // 所属角色
  email?: string; // 邮箱
  status?: string; // 状态
  pwd?: string; // 密码
  userJobs?: UserJobsItem[]; // 所属部门、岗位
  phoneApproved?: boolean; // 手机号是否验证
  emailApproved?: boolean; // 邮箱是否验证
}

// 所属部门、岗位
export interface UserJobsItem {
  deptId: string; // 部门
  jobId: string; // 岗位
}

// 角色权限
export interface RolesPerms {
  //角色数组
  roleCodes: string[];
  //权限数组
  permCodes: string[];
}

//二维码创建
export interface LoginQrcodeCreate {
  //租户
  tenant: string;
  //公众号APPID
  authorizerAppid: string;
}

//二维码相应
export interface LoginQrcodeResp {
  //凭证
  ticket?: string;
  //二维码Url
  qrcodeUrl?: string;
}

/**
 * 扫码登录参数
 */
export interface LoginQrcodeReq {
  //租户
  tenant?: string;
  /** 目录ID */
  directoryId?: string;
  //公众号APPID
  authorizerAppid?: string;
  //凭证
  ticket: string;
  /** 客户端ID */
  clientId?: string;
  /** 互斥角色 */
  scope?: string;
}

export interface MyOrganList {
  results: MyOrganModel[];
}

export interface MyOrganModel {
  // 组织ID
  organId: string;
  // 组织名称
  organName: string;
  // 组织编码
  organCode: string;
  // 拼音
  pinYin: string;
  // 组织简称
  shortName: string;
  // 组织类别(ENT: 企业, PERSON: 个体, GOV: 政, OTHER: 其他组织)
  organType: string;
  // 上级组织ID
  parentId: string;
  // Logo
  logoUrl: string;
  // 所属行业
  industry: string;
  // 详细地址
  address: string;
  // 经度
  geoLongitude: string;
  // 纬度
  geoLatitude: string;
  // 联系人
  contactPerson: string;
  // 联系电话
  contactPersonMobile: string;
  // 联系电话脱敏
  contactPersonMobileIns: string;
  // 是否完善
  perfectStatus: boolean;
  // 组织状态(NORMAL: 正常, TRIAL: 试用, STOP: 停用, OVERDUE: 欠费)
  status: string;
  // 组织租户
  tenant: string;
  // 公众号AppID
  appId: string;
  // 公众号名称
  appName: string;
  // 应用二维码地址
  appQrcodeUrl: string;
}

// 手机号/邮箱注册用户
export interface RegisterReq {
  // 图形验证码
  captchaCode?: string;
  captchaId?: string;
  // 租户
  tenant?: string;
  // 用于检测重复请求的唯一字符串ID
  requestId: string;
  // 目录ID
  directoryId?: string;
  // 客户端ID
  clientId?: string;
  // 手机号/邮箱
  name: string;
  // 手机号/邮箱的验证码
  validCode: string;
  // 姓名
  realName?: string;
  // 昵称
  nickName: string;
  // 头像
  avatar?: string;
  // 出生日期
  birthDate?: string;
  // 性别
  gender?: string;
  // 密码
  pwd: string;
  // 确认密码
  repeatPwd: string;
}

export interface SendValidCodeReq {
  tenant: string;
  directoryId: string;
  name: string;
  captchaId: string;
  captchaCode: string;
  product: string;
  sendValidCode: boolean;
}

// 忘记密码/找回密码/重置密码.
export interface ForgotPhoneEmailReq {
  tenant?: string;
  requestId: string;
  // 目录ID
  directoryId?: string;
  // 客户端ID
  clientId?: string;
  // 手机号/邮箱
  name: string;
  // 手机号/邮箱的验证码
  validCode: string;
  // 密码
  pwd: string;
  // 确认密码
  repeatPwd: string;

  captchaId?: string;
  captchaCode?: string;
}
